package com.qd.panda.mapper.space;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.qd.common.panda.domain.entity.space.*;
import com.qd.panda.model.ParkSpace;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 车位租赁信息
 *
 * @author sjk
 */
public interface ParkSpaceMapper extends BaseMapper<ParkSpace> {
    /**
     * 分页
     *
     * @param page  分页属性
     * @param query 查询条件
     * @return 数据
     */
    IPage<ParkSpaceDTO> page(IPage<ParkSpace> page, @Param(Constants.WRAPPER) Wrapper<ParkSpace> query);

    /**
     * 业主端列表
     *
     * @param page  分页属性
     * @param query 查询条件
     * @return 数据
     */
    IPage<OwnerParkSpaceDTO> ownerPage(IPage<OwnerParkSpaceDTO> page, @Param(Constants.WRAPPER) Wrapper<OwnerParkSpaceDTO> query, @Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate);

    /**
     * 查询最后一次发布的租赁信息
     *
     * @param publisher 发布人
     * @param aid 车位ID
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 最新租赁信息
     */
    OwnerParkSpaceDTO getLast(@Param("publisher") String publisher, @Param("aid") String aid, @Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate);
    /**
     * 查询租赁的订单列表
     *
     * @param sid 租赁ID
     * @return 列表
     */
    List<ParkInfoSpaceTenantDTO> getList(@Param("sid") String sid);

    /**
     * 查询租赁信息
     *
     * @param tenant    租赁人
     * @param leaseTime 当前时间
     * @return 最新租赁信息
     */
    List<CarOwnerParkSpaceDTO> rentalInformation(@Param("tenant") String tenant, @Param("leaseTime") LocalDate leaseTime);

    /**
     * 查询是否存在发布的租赁信息
     *
     * @param publisher 发布人
     * @param aid 车位ID
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 条数
     */
    String existsDate(@Param("publisher") String publisher, @Param("aid") String aid, @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 车主端列表
     *
     * @param page  分页属性
     * @param query 查询条件
     * @return 数据
     */
    IPage<CarOwnerParkSpaceDTO> carOwnerPage(IPage<CarOwnerParkSpaceDTO> page, @Param(Constants.WRAPPER) Wrapper<CarOwnerParkSpaceDTO> query);
    /**
     * 详情
     *
     * @param sid 主键
     * @return 详情
     */
    CarOwnerParkSpaceDTO getCarOwnerById(@Param("sid") String sid);

    /**
     * 统计发布人赚取的金额
     * @param publisher 发布人
     * @return 金额
     */
    @MapKey("divide_accounts")
    Map<String,Object> ownParkAmount(@Param("publisher") String publisher);

    /**
     * 发布人收益列表
     * @param page 分页属性
     * @param publisher 发布人
     * @return 数据
     */
    IPage<OwnerMyIncomeSpaceDTO> ownMyIncome(IPage<OwnerMyIncomeSpaceDTO> page, @Param("publisher") String publisher);

    /**
     * 是否有租赁信息
     * @param tenant 人
     * @param tenantNumber 车牌号
     * @param dateList 日期段
     * @return 租赁ID
     */
    String paySuccess(@Param("tenant") String tenant, @Param("tenantNumber")String tenantNumber, @Param("dateList") List<LocalDateTime> dateList);

    /**
     * 查询今日过期的租赁信息
     * @param now 日期
     * @return 列表
     */
    List<OwnerMyIncomeSpaceDTO> expireList(@Param("now") LocalDate now);
}